package com.example.computer_exam_training_sys.service;

import com.example.computer_exam_training_sys.entity.UserStudyStatistics;
import com.example.computer_exam_training_sys.entity.UserStudyStatisticsWithAnalysis;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

public interface UserStudyStatisticsService {
    /**
     * 记录学习统计
     */
    void recordStatistics(UserStudyStatistics statistics);

    /**
     * 获取指定日期的学习统计（带分析）
     */
    UserStudyStatisticsWithAnalysis findByUserIdAndDateWithAnalysis(Long userId, LocalDate date);

    /**
     * 获取日期范围内的学习统计（带分析）
     */
    List<UserStudyStatisticsWithAnalysis> findByUserIdAndDateRangeWithAnalysis(
            Long userId, LocalDate startDate, LocalDate endDate);

    /**
     * 获取总学习时间
     */
    Integer getTotalStudyTime(Long userId);

    /**
     * 获取总题目数
     */
    Integer getTotalQuestionCount(Long userId);

    /**
     * 获取总正确题目数
     */
    Integer getTotalCorrectCount(Long userId);

    /**
     * 获取正确率
     */
    Double getCorrectRate(Long userId);

    /**
     * 获取学习时间趋势
     */
    Map<String, List<Object>> getStudyTimeTrend(Long userId);

    /**
     * 获取题目数量趋势
     */
    Map<String, List<Object>> getQuestionCountTrend(Long userId);

    /**
     * 获取正确率趋势
     */
    Map<String, Object> getCorrectRateTrend(Long userId);
    
    /**
     * 从练习和考试记录更新统计数据
     * 通过user_id关联user_practices和user_exams获取数据
     * 通过user_id关联user_learning_progress更新学习进度
     */
    void updateStatisticsFromPracticesAndExams(Long userId, LocalDate date);
} 